// 基地址
let baseURL = import.meta.env.HY_API_URL
// 后端返回的data的格式，需要自定义
type Data<T> = {
	code: number
	msg: string
	data: T
}
export const api = <T>(options: UniApp.RequestOptions) => {
	// 1. 非 http 开头需拼接地址
	if (!options.url.startsWith('http')) {
		options.url = baseURL + options.url
	}
	// 2. 请求超时, 默认 60s 设置为60s
	options.timeout = 60000
	options.header = {
		...options.header,
	}
	const token = ''
	if (token) {
		options.header.Authorization = token
	}
	// 1. 返回 Promise 对象
	return new Promise<Data<T>>((resolve, reject) => {
		uni.request({
			...options,
			success: (res) => {
				if (res.statusCode >= 200 && res.statusCode < 300) {
					const CODE = (res.data as Data<T>).code
					const msg = (res.data as Data<T>).msg
					switch (CODE) {
						case 500:
							uni.showToast({
								icon: 'none',
								title: msg,
							})
							break;

						case 401:
							uni.showToast({
								icon: 'none',
								title: '需要登录',
								duration: 500
							})
							break;
					}
					// 2.1 提取核心数据 res.data
					resolve(res.data as Data<T>)
				} else {
					// 其他错误 -> 根据后端错误信息轻提示
					uni.showToast({
						icon: 'none',
						title: (res.data as Data<T>).msg || '请求错误，重新登录试试',
					})
					reject(res)
				}
			},
			fail: (err) => {
				// 2.2 其他错误 -> 根据后端错误信息轻提示
				uni.showToast({
					icon: 'none',
					title: err.errMsg || '请求错误，重新试试',
				})
				reject(err)
			}
		})
	})
}